package br.boicotando.persistencia;

import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;


@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TIPO", discriminatorType = DiscriminatorType.STRING, length = 3)
@DiscriminatorValue("SUB")
@SuppressWarnings("serial")
public class ESubCategoria extends ECategoria {

	@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
	@JoinColumn(name = "ID_CATEGORIA")
	private ECategoria categoria;
	
	public ESubCategoria() {
	
	}

	public ECategoria getCategoria() {
		return categoria;
	}

	public void setCategoria(ECategoria categoria) {
		if (categoria instanceof ESubCategoria) {
			categoria = ((ESubCategoria) categoria).getCategoria();
		}
		if (this.categoria != null && this.categoria.contemSubCategoria(this)) {
			this.categoria.removeSubCategoria(this);
		}
		this.categoria = categoria;
		if (categoria != null && !categoria.contemSubCategoria(this)) {
			categoria.adicionaSubCategoria(this);
		}
	}

	@Override
	public boolean adicionaSubCategoria(ESubCategoria s) {
		if (categoria == null) {
			return false;
		}
		return categoria.adicionaSubCategoria(s);
	}

	@Override
	public boolean contemSubCategoria(ESubCategoria s) {
		if (categoria == null) {
			return false;
		}
		return categoria.contemSubCategoria(s);
	}

	@Override
	public ESubCategoria[] getSubCategorias(ESubCategoria[] a) {
		if (categoria == null) {
		  return super.getSubCategorias(a);
		}
		return categoria.getSubCategorias(a);
	}

	@Override
	public boolean removeSubCategoria(ESubCategoria s) {
		if (categoria == null) {
			return false;
		}
		return categoria.removeSubCategoria(s);
	}

}
